package com.study.modules.designPatterns.No1SingletonMode;

/**
 * 单例模式
 * 特点：
 * 1. 单例类只能有一个实例
 * 2. 单例类必须自己创建自己的唯一实例
 * 3. 单例类必须给所有其他对象提供这一实例
 * 4. 单例类必须保证这个实例是唯一的
 * 5. 单例类必须自行向整个系统提供这个实例
 * 6. 单例类必须防止被实例化多次
 * <p>
 * 单例模式的几种实现方式
 * 1.饿汉式单例，对象在加载时就已经创建好了
 * 2.懒汉式单例，对象在第一次使用时才创建
 * 3.双重检查锁单例，对象在第一次使用时才创建
 * 4.静态内部类单例，对象在第一次使用时才创建
 * 5.枚举单例，对象在加载时就已经创建好了
 */
public class TestSingletonMode {

    public static void main(String[] args) {
        System.out.println("===========单例模式测试===========");
        System.out.println("饿汉式单例：" + SingletonHungryMan.getInstance().hashCode());
        System.out.println("懒汉式单例：" + SingletonLazyMan.getInstance().hashCode());
        System.out.println("双重检查锁单例：" + SingletonDoubleCheckLock.getInstance().hashCode());
        System.out.println("静态内部类单例：" + SingletonStaticInnerClass.getInstance().hashCode());
        System.out.println("枚举单例：" + singletonEnum.INSTANCE.hashCode());
    }

}
